import com.sun.xml.internal.ws.api.ha.StickyFeature;
import org.omg.CORBA.portable.ValueOutputStream;
import org.omg.CosNaming.NamingContextExtPackage.StringNameHelper;

/**
 * Keafmd
 *
 * @ClassName: Demo
 * @Description: Demo
 * @author: lijl
 * @date: 2022/12/10 11:56
 * @Blog: https://keafmd.blog.csdn.net/
 */

/**
 * 子类对父类的非静态方法可以实现方法的覆盖
 * 静态方法不能实现方法重载，子类中创建的静态方法不会覆盖父类中同名的静态方法
 * 子类可以继承除构造方法和private修饰的变量或方法的所有成员
 * 子类中不可以覆盖父类中被final修饰的方法
 */

class Animal {
    private String name;
    Animal(String name) {
        this.name = name;
    }
    public void eat() {
        System.out.println("Animal  eat!!!");
    }
    public void sleep() {
        System.out.println("Animal   sleep!!!");
    }

    static void run(){
        System.out.println("Animal   run!!!");
    }
    //final 修饰的方法不可以在子类中被覆盖
    final void swim() {
        System.out.println("Animal   swim!!!");
    }

}
class Cat extends Animal {
    Cat(String name) {
        super(name);
    }
    //重写父类的方法时访问权限不能低于父类方法的访问权限
    public void eat () {
        System.out.println("Cat   eat!!!");
    }
    public void cry() {
        System.out.println("Cat : 喵喵");
    }
    //子类中创建的静态方法不会覆盖父类中相同名字的静态方法
    public static void run() {
        System.out.println("Cat   run!!!");
    }
}
class Bird extends Animal{
    public Bird(String name) {
        super(name);
    }
    public void eat() {
        System.out.println("Bird   eat!!!");
    }
    public void fly() {
        System.out.println("Bird   fly!!!");
    }
    //不可以覆盖父类中被final修饰的方法
//    final void swim() {
//        System.out.println("Bird can't swim!!!");
//    }
}
public class Demo {
    public static void main(String[] args) {
        //父类引用，引用子类对象， 会发生向上转型，只能使用父类中的方法，除非在子类中重写父类的方法。
        Animal animal = new Cat("咪咪");
//        animal.eat();
//        Cat cat = (Cat)animal;
//        cat.cry();
//        Animal animal2 = new Bird("啾啾");
//        animal2.eat();
//        Bird bird = new Bird("喳喳");
//        bird.fly();
//        animal.run();    //子类中创建的静态方法不会覆盖父类中相同名字的静态方法
        animal.swim();
    }
}
